/**
 * 计算两个字符串的最大公共子串（Longest Common Substring）的长度
 */
 var longestSubStr = function(str1, str2) {
  let lcs = new Array(str1.length);
  let i;
  let position = [];
  for (i = 0; i < lcs.length; i++) {
    lcs[i] = new Array(str2.length).fill(0);
  }
  // 设置矩阵，匹配相同字符的序列，在矩阵上表现出来就是都在一条斜线上，最终计算斜线长度即可得出最长子序列，也可以统计出他们的字符
  for (i = 0; i < str1.length; i++) {
    const s1 = str1[i];
    for (let j = 0; j < str2.length; j++) {
      const s2 = str2[j];
      if(s1 && s2 && s1 === s2) {
        lcs[i][j] = ( i === 0 || j === 0 ? '' : lcs[i-1][j-1] === 0 ? '' : lcs[i-1][j-1]) + s1;
        position.push([i, j]);
      } else {
        lcs[i][j] = 0;
      }
    }
  }
  // 找到所有不为0的位置，最长的就是
  let maxStr = '';
  position.forEach(po => {
    let [m, n] = po;
    let str = lcs[m][n];
    maxStr = maxStr.length > str.length ? maxStr : str;
  })
  console.log(maxStr)
}
console.time('begin')
longestSubStr('asdfghjkl', 'aweghjklop');
console.timeEnd('begin')